/*
 * Pertraukimų tvarkyklė
 */
#ifndef ISR_H
#define ISR_H

#define IRQ0 32 /* Timeris */
#define IRQ1 33 /* Klaviatura */
#define IRQ2 34
#define IRQ3 35
#define IRQ4 36
#define IRQ5 37
//! IDE primary channel IRQ line.
#define IDEP_IRQ        0x0E
//! IDE secondary channel IRQ line.
#define IDES_IRQ        0x0F

#define IRQ6 38
#define IRQ7 39
#define IRQ8 40
#define IRQ9 41
#define IRQ10 42
#define IRQ11 43
#define IRQ12 44
#define IRQ13 45
#define IRQ14 46
#define IRQ15 47

/*--Struktūros--*/
typedef struct registers{
  u32int ds;                  // Data segment selector
  u32int edi, esi, ebp, esp, ebx, edx, ecx, eax; // Pushed by pusha.
  u32int int_no, err_code;    // Interrupt number and error code (if applicable)
  u32int eip, cs, eflags, useresp, ss; // Pushed by the processor automatically.
} reg_t;

/*--Kintamieji--*/
typedef void (*isr_t)(reg_t );

/*--Funkcijų antraštės--*/
/* Suteikia galimybę registruoti atšaukimus pertraukimams ar IRQ's. */
/* Kad palengvinti supratimą, kai reikia IRQ tai pirmajį parametrą nurodome viršuje esančius #define */
void register_interrupt_handler(u8int , isr_t );
/* ISR tvarkyklė */
void isr_handler(reg_t );
/* IRQ tvarkyklė */
void irq_handler(reg_t ); 

#endif /* ISR_H */
